package cn.txauction.business.dao.base;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

import cn.txauction.web.paging.PagingResult;


public interface IBaseDao<T> {
	/**
	 * 刷出后清空一级缓存
	 */
	void flushAndClearSession();

	/**
	 * 保存实体
	 * 
	 * @param o
	 */
	long save(T o);

	/**
	 * 删除实体
	 * 
	 * @param o
	 */
	void delete(T o);

	/**
	 * 删除一批实体,
	 * 
	 * @param ids
	 *            要删除的实体的id
	 */
	void delete(int... ids);

	/**
	 * 更新实体
	 * 
	 * @param o
	 */
	void update(T o);
	/**
	 * 更新实体
	 * 
	 * @param o
	 */
	void merge(T o);

	/**
	 * 新增/更新实体
	 * 
	 * @param t
	 */
	void saveOrUpdate(T t);

	/**
	 * 获取指定id的实体
	 */
	T get(Long id);

	/**
	 * 获取所有实体
	 * 
	 * @return
	 */
	List<T> findAll();

	/**
	 * 查询记录总数
	 * 
	 * @return
	 */
	long getTotal();

	/**
	 * 从索引first开始最多取max条记录
	 * 
	 * @param firstResult
	 * @param maxResult
	 * @return 指定的一段数据
	 */
	public PagingResult<T> findPagingResult(int firstResult, int maxResult);
	
	public PagingResult<T> findPagingResult(String queryString, int firstResult, int maxResult);
	public PagingResult<T> findPagingResult(final String queryString,final Object[] params, final int firstResult, final int maxResult);
	
	/**
	 * 查询结果列表中的第一个结果,没有查询条件
	 */
	public Object findFirstResult(DetachedCriteria dc);
	
	public long findIntResult(String queryString, Object value);
	public long findIntResult(String queryString, Object[] values);
	
	/**
	 * 根据HQL语句和单一参数返回一个domain对象
	 * @param queryString
	 * @param value 参数
	 * @return
	 */
	public T findUniqueResult(String queryString, Object value);
	
	/**
	 * 根据HQL语句和参数数组返回一个唯一的domain对象，如果不唯一的话则抛出异常
	 * @param queryString
	 * @param value 参数数组
	 * @return
	 */
	public T findUniqueResult(String queryString, Object[] values);
	
	/**
	 * 根据HQL语句和参数数组返回查询结果的第一个domain对象
	 * @param queryString
	 * @param values
	 * @return
	 */
	public T findFirstResult(String queryString, Object[] values);
	
	
}
